// 1.变量和常量
 {
    let count = 0
    count ++

    const BASE_URL = 'http://web.Zutto-zd.com/api'

 }

 //2.模板字符串
 const str1 = 'abc' 
 const str2 = `efg${str1}`

<<<<<<< HEAD
console.log(str2)
<<<<<<< HEAD
=======
=======
// console.log(str2)
>>>>>>> layer6


//3.解构赋值
// const arr = [1,2,3]
// const v1 = arr[0]

const [a,b,c] = [1,2,3]
// console.log(a,b,c)

// const obj = {
//    username : '张三',
//    age : 18,
//    gender : male
// }

// console.log(obj)


 
const { username,age : userAge,...otherInfo } = {
   username : '张三',
   age : 18,
   gender : 'male',
   category : 'user'
}

// console.log(username,userAge,otherInfo)




//4.数组和对象的扩展功能
//4.1扩展运算符
const arr1 = [1,2,3]
const arr2 = [4,5,6]
const arr3 = [...arr1,...arr2,10,20]

// console.log(arr3)

const obj1 ={
   a:1
}

const obj2 ={
   b:2
}

const obj3 ={
   name : 'ES6',
   ...obj1,
   ...obj2
}

// console.log(obj3)


//4.2数组方法
//伪数组形式
function fn(){
   // console.log(arguments)
   // arguments.push(1)
   //不是个函数，没有这个功能，所以会报错
   Array.from(arguments).forEach(function(item){
      // console.log(item)
   })
   //可以用Array.from的方法让伪数组有数组的功能


}

fn(1,2,3,4)


//4.3 对象的方法 Object.assign()
const objA ={
   name : '1222',
   age : 18
}

const objB ={
   gender : 'male'
}

const objC = Object.assign({},objA,objB)
//对象的浅拷贝
// objB.name = '1221'
// console.log(objA,objB,objC)

//对象的拷贝、合并、更新


//4.4 class快速生成多个对象
// //通过ES6对类进行实例化
class A {
   constructor (name,age){
      this.name = name,
      this.age = age
   }

   introduce(){
      console.log(`我正在学的是${this.name},我的年龄是${this.age}`)
   }

}

const a1 = new A('ES6',20)
console.log(a1)
a1.introduce()

//通过ES6对A类派生出新的类
class B extends A {
   constructor(name,age,gender){
      super(name,age,gender)
      this.gender = gender
   }

   sayHello(){
      // console.log('你好，我正在学习' + this.name)
   }
}

const b1 = new B('JavaScript',19,'女')
// console.log(b1)
// b1.sayHello()
// b1.introduce()


//5.箭头函数

const getSum1 = n => n + 3
console.log(getSum1(10))
// const getSum1 = function (n){
//    return n + 3
// }

const getSum2 = (n1 , n2) => n1 +n2
console.log(getSum2(10,20))

const getSum3 = (n1,n2,...other) => console.log(n1,n2,other)
console.log(getSum3(10,20,30,40,50))

const getResult = arr => {
   let sum = 0
   arr.forEach(item => sum += item)
   return sum
}

console.log(getResult([1,2,3,4,5]))

>>>>>>> layer6


<<<<<<< HEAD
//3.解构赋值
// const arr = [1,2,3]
// const v1 = arr[0]

const [a,b,c] = [1,2,3]
console.log(a,b,c)

// const obj = {
//    username : '张三',
//    age : 18,
//    gender : male
// }

// console.log(obj)
=======
//——————————————————————ES6异步处理————————————————————————
//1.Promise Ansync 同步和异步
//常见的异步：定时器 Ajax
console.log("任务1:---同步");
setTimeout(() => {
   console.log("任务4:---异步");
   setTimeout(() => {
      console.log("任务5:---异步");
      console.log("任务6:---同步");
      
   }, 2000);

}, 2000);
console.log("任务2:---同步");

console.log("任务3:---同步");
// 大概是同步任务执行完之后才会执行到异步任务

const p1 = new Promise((resolve,reject) => {
   resolve("任务1:成功所获得的数据")
   reject("任务失败获得的数据")
});
console.log(p1);

p1.then(data => {
   console.log(data)

   //多个异步任务的处理
   return new Promise((resolve,reject) => {
      resolve("任务2:成功所获得的数据")
      // reject("任务失败获得的数据")
   })
}, err =>{
   console.log("任务1失败了")
   throw new Error("任务1失败")
})

.then(data =>{
   console.log(data)
},err =>{
   console.log("任务2失败")
})


.catch(err =>{
   console.log(err)
})

p1.then().catch()

// Aysnc await
//步骤1：准备一个返回promise对象的函数
function asyncTask (){
   return new Promise((resolve,reject) =>{
      const isSuccess = true
      if(isSuccess){
         console.log("任务X:成功")
      }else{
         console.log("任务X:失败")
      }
   })
}

//步骤2：为了使用await函数而添加一个Aysnc
async function main (){
   console.log("任务1")
   const data = await asyncTask()
   console.log(data)
   console.log("任务3")

}

main()
>>>>>>> layer6


 
const { username } = {
   username : '张三',
   age : 18,
   gender : male
}

<<<<<<< HEAD
console.log(obj)
=======


<<<<<<< HEAD
>>>>>>> layer6
=======






// 2.Proxy 代理
Object.defineProperties()
const obj4 ={
   name : "mp",
   age : "32"
} 
// console.log(obj4.name)
// obj4.name = "su"
// console.log(obj4)

const container = document.getElementById('container');
container.textContent = obj4.name;
// obj4.name = "Mig"
// container.textContent = obj4.name;
// 每次对对象的改动更新到网页上都需要增加代码，所以引入代理
const px1 = new Proxy (obj4,{
   get(traget,property,receiver){
      return obj4[property]
   },
   set(traget,property,value,receiver){
      obj4[property] = value
   }
})

console.log(px1.name);
px1.age = 39;





// 3.Module : ESM CommonJS(Node.js)
ESM
import moduleA from "./a.js"
import moduleB from "./b.js"
import { aTitle,aFn } from "./a.js"
import { bTitle,bFn as bFunction } from "./b.js"
console.log(moduleA)
console.log(moduleB)
console.log(aTitle,aFn,bTitle,bFunction)


//CommonJS
const moduleC = require('./c.js')
console.log(moduleC)
>>>>>>> layer6
